list([]).
list([E|L]):- list(L).

member(X,[X|L]).
member(X,[Y|L]):-member(X,L).

prefix([],L).
prefix([X|L1],[X|L2]):-prefix(L1,L2).

suffix(L,L).
suffix(L1,[X|L2]):-suffix(L1,L2).

append([],L,L).
append([X|L1],L2,[X|L3]):-append(L1,L2,L3).

length([],0).
length([X|L],s(N)):-length(L,N).

sublist_a(L1,L2):-prefix(L3,L2),suffix(L1,L3).

sublist_b(L1,L2):-suffix(L3,L2),prefix(L1,L3).

sublist_c(L1,L2):-prefix(L1,L2).
sublist_c(L1,[X|L2]):-sublist_c(L1,L2).

sublist_d(X,AXB):- append(A,XB,AXB),append(X,B,XB).

sublist_e(X,AXB):- append(AX,B,AXB),append(A,X,AX).

sublist(L1, L2):-sublist_a(L1, L2).

member_a(X,L):-sublist([X],L).

member_b(X,L):-append(L1,[X|L2],L).

adjacent(X,Y,L):-append(L1,[X,Y|L2],L).

last(X,L):-append(L1,[X],L).

reverse([],[]).
reverse([X|L1],L2):-
reverse(L1,L3),append(L3,[X],L2).

reverse_acc(L1,L2):-reverse_acc(L1,[],L2).
reverse_acc([X|L1],Acc,L2):-reverse_acc(L1,[X|Acc],L2).
reverse_acc([],L,L).
